package com.study.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.study.mapper.EmpExprMapper;
import com.study.mapper.EmpMapper;
import com.study.pojo.*;
import com.study.service.EmpLogService;
import com.study.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 类名称：EmpServiceImpl
 * 描述：员工业务接口实现类
 *
 * @author: Lixx
 * 创建时间: 2025/03/06
 */
//IOC控制反转，将对象的控制权交给Spring的IOC容器，由IOC容器创建及管理对象。
@Service
public class EmpServiceImpl implements EmpService {
    //IOC容器创建的对象称为bean对象。
    @Autowired
    private EmpMapper empMapper;
    @Autowired
    private EmpExprMapper EmpExprMapper;
    @Autowired
    private EmpLogService empLogService;

    /*   原始分页查询
    @Override
    public PageResult<Emp> list(Integer page, Integer pageSize) {
        //TODO: 查询总记录数
        Long total = empMapper.count();

        //TODO: 查询分页数据
        Integer start = (page - 1) * pageSize;
        List<Emp> empList = empMapper.list(start, pageSize);

        //TODO: 封装PageResult对象并返回
        return new PageResult<>(total, empList);
    }
    */

    @Override
    public PageResult<Emp> list(EmpQueryParam empQueryParam) {
        //TODO: 引入PageHelper分页插件
        PageHelper.startPage(empQueryParam.getPage(), empQueryParam.getPageSize());

        //TODO: 查询分页数据
        List<Emp> empList = empMapper.list(empQueryParam);

        //TODO: 封装数据
        Page<Emp> pageObj = (Page<Emp>) empList;
        return new PageResult<>(pageObj.getTotal(), pageObj.getResult());
    }

    /**
     * 加
     *
     * @param emp 员工对象
     * @author Lixx
     * @date 2025/03/10
     */
    @Transactional(rollbackFor = Exception.class) // 事务注解
    @Override
    public void add(Emp emp) {
        //TODO: 添加员工基本信息
        emp.setCreateTime(LocalDateTime.now());
        emp.setUpdateTime(LocalDateTime.now());
        empMapper.add(emp);

        //TODO: 保存员工工作经历
        List<EmpExpr> exprList = emp.getExprList();

        if (!CollectionUtils.isEmpty(exprList)){
            exprList.forEach(empExpr -> empExpr.setEmpId(emp.getId()));

            EmpExprMapper.insertBatch(exprList);
        }

        //TODO: 保存日志信息
        empLogService.insertLog(new EmpLog(null, LocalDateTime.now(), "添加员工信息"));
    }

}
